/**
 * Mock 数据服务器 - 使用 Express
 */
import express from 'express'
import cors from 'cors'
import morgan from 'morgan'
import { createExpressRouter } from './routes/index.js'
import { corsOptions, delayMiddleware, requestLogger, errorHandler } from './middleware/index.js'

// 创建 Express 应用
const app = express()

// 服务器配置
const PORT = process.env.PORT || 3002
const HOST = process.env.HOST || 'localhost'

// 中间件配置
app.use(cors(corsOptions)) // 使用改进的 CORS 配置
app.use(requestLogger) // 自定义请求日志
app.use(express.json({ limit: '10mb' })) // 解析 JSON
app.use(express.urlencoded({ extended: true })) // 解析 URL 编码
app.use(delayMiddleware(100, 400)) // 添加延迟中间件（模拟网络延迟）

// 使用 Express 路由
app.use('/api', createExpressRouter())

// 根路径处理
app.get('/', (req, res) => {
  res.json({
    code: 200,
    message: 'ZBlog Mock Server is running!',
    data: {
      name: 'zblog-mock-server',
      version: '1.0.0',
      environment: 'mock',
      endpoints: [
        'GET /api/health - 健康检查',
        'GET /api/articles - 获取文章列表',
        'GET /api/article/:id - 获取文章详情',
        'GET /api/categories - 获取分类列表',
        'GET /api/tags - 获取标签列表',
        'GET /api/archive - 获取归档数据',
        'GET /api/stats - 获取统计信息',
        'GET /api/articles/search - 搜索文章',
        'POST /api/articles - 创建文章',
        'PUT /api/articles/:id - 更新文章',
        'DELETE /api/articles/:id - 删除文章',
        'GET /api/comments - 获取评论列表',
        'POST /api/comments - 创建评论',
        'POST /api/comments/:id/like - 点赞评论',
        'GET /api/comments/:id/replies - 获取回复列表',
        'GET /api/users/search - 搜索用户',
        'GET /api/articles/:articleId/comments/stats - 获取评论统计',
      ],
    },
  })
})

// 404 处理
app.use('*', (req, res) => {
  res.status(404).json({
    code: 404,
    message: 'Route not found',
    data: null,
    path: req.originalUrl,
    method: req.method,
  })
})

// 全局错误处理
app.use(errorHandler)

// 启动服务器
const server = app.listen(PORT, HOST, () => {
  console.log('🚀 Mock 服务器启动成功！')
  console.log(`📡 地址: http://${HOST}:${PORT}`)
  console.log(`🎭 Mock API: http://${HOST}:${PORT}/api`)
  console.log(`❤️  健康检查: http://${HOST}:${PORT}/api/health`)
  console.log('📚 API 文档: http://' + HOST + ':' + PORT)
  console.log('⚡ 使用 Express + MockJS 提供服务')
})

// 优雅关闭
const gracefulShutdown = (signal) => {
  console.log(`🛑 接收到 ${signal} 信号，正在关闭服务器...`)

  server.close((err) => {
    if (err) {
      console.error('❌ 服务器关闭时出错:', err)
      process.exit(1)
    }

    console.log('✅ Mock 服务器已优雅关闭')
    process.exit(0)
  })

  // 强制关闭超时
  setTimeout(() => {
    console.log('⚠️  强制关闭服务器')
    process.exit(1)
  }, 10000)
}

process.on('SIGTERM', () => gracefulShutdown('SIGTERM'))
process.on('SIGINT', () => gracefulShutdown('SIGINT'))

// 未捕获异常处理
process.on('uncaughtException', (error) => {
  console.error('💥 未捕获的异常:', error)
  gracefulShutdown('uncaughtException')
})

process.on('unhandledRejection', (reason, promise) => {
  console.error('💥 未处理的 Promise 拒绝:', reason)
  gracefulShutdown('unhandledRejection')
})

export default app
